// GTY

#pragma once

#include "CoreMinimal.h"
#include "GameplayTagContainer.h"



/**
*  * GameplayTags 标签 单例模式
 * 内部包含原生的项目中使用的标签
 */

struct FAuraGameplayTags
{
public:
	static const FAuraGameplayTags& Get(){ return GameplayTags;}
	static void InitializeNativeGameplayTags();

	FGameplayTag Attributes_Primary_Strength;// 力量
	FGameplayTag Attributes_Primary_Intelligence;// 智力
	FGameplayTag Attributes_Primary_Resilience;// 韧性
	FGameplayTag Attributes_Primary_Vigor;// 体质

	FGameplayTag Attributes_Secondary_Armor;// 护甲
	FGameplayTag Attributes_Secondary_ArmorPenetration;// 护甲穿透
	FGameplayTag Attributes_Secondary_BlockChance;// 格挡
	FGameplayTag Attributes_Secondary_CriticalHitChance;// 暴击率
	FGameplayTag Attributes_Secondary_CriticalHitDamage;// 暴击伤害
	FGameplayTag Attributes_Secondary_CriticalHitResistance;// 暴击抗性
	FGameplayTag Attributes_Secondary_HealthRegeneration;// 生命回复
	FGameplayTag Attributes_Secondary_ManaRegeneration;// 法力回复
	FGameplayTag Attributes_Secondary_EnergyRegeneration;
	FGameplayTag Attributes_Secondary_MaxHealth;
	FGameplayTag Attributes_Secondary_MaxMana;
	FGameplayTag Attributes_Secondary_MaxEnergy;

	//属性伤害抗性
	FGameplayTag Attributes_Resistance_Fire; //火属性伤害抵抗 标签
	FGameplayTag Attributes_Resistance_Lightning; //雷属性伤害抵抗 标签
	FGameplayTag Attributes_Resistance_Arcane; //魔法伤害抵抗 标签
	FGameplayTag Attributes_Resistance_Physical; //物理伤害抵抗 标签

	//元属性
	FGameplayTag Attributes_Meta_IncomingXP; //元属性经验 标签
	FGameplayTag Attributes_Meta_IncomingMoney;//经济

	
	//欲买桂花同载酒 终不似 少年游

	FGameplayTag InputTag_LMB;// 左键
	FGameplayTag InputTag_RMB;// 右键
	FGameplayTag InputTag_1;
	FGameplayTag InputTag_2;
	FGameplayTag InputTag_3;
	FGameplayTag InputTag_4;
	FGameplayTag InputTag_Passive_1; //被动技能1
	FGameplayTag InputTag_Passive_2; //被动技能2


	//测试
	FGameplayTag InputTag_T;
	FGameplayTag Abilities_Flashed;
	FGameplayTag Cooldown_Flashed;
	FGameplayTag InputTag_Alt;
	//END

	FGameplayTag Damage;// 伤害
	FGameplayTag Damage_Fire;//火焰
	FGameplayTag Damage_Lightning;//雷电
	FGameplayTag Damage_Arcane;//奥秘
	FGameplayTag Damage_Physical;//物理

	FGameplayTag DeBuff_Burn; //火属性负面效果 燃烧
	FGameplayTag DeBuff_Stun; //雷属性负面效果 眩晕
	FGameplayTag DeBuff_Arcane; //魔法伤害负面效果
	FGameplayTag DeBuff_Physical; //物理伤害负面效果 流血

	
	FGameplayTag DeBuff_Chance; //负面效果触发几率标签
	FGameplayTag DeBuff_Damage; //负面效果伤害标签
	FGameplayTag DeBuff_Duration; //负面效果持续时间标签
	FGameplayTag DeBuff_Frequency; //负面效果触发间隔标签


	FGameplayTag Abilities_None;
	FGameplayTag Abilities_Attack;
	FGameplayTag Abilities_Summon;

	FGameplayTag Abilities_HitReact; //受击技能标签

	FGameplayTag Abilities_Status_Locked; //技能状态 已锁定
	FGameplayTag Abilities_Status_Eligible; //技能状态 可解锁
	FGameplayTag Abilities_Status_Unlocked; //技能状态 已解锁
	FGameplayTag Abilities_Status_Equipped; //技能状态 已装配
	
	FGameplayTag Abilities_Type_Offensive; //技能类型 主动技能
	FGameplayTag Abilities_Type_Passive; //技能类型 被动技能
	FGameplayTag Abilities_Type_None; //技能类型 空 受击等技能设置


	FGameplayTag Abilities_Fire_FireBolt; //火球术技能标签
	FGameplayTag Abilities_Lightning_Electrocute;//电击技能标签
	FGameplayTag Abilities_Arcane_ArcaneShards; //奥数爆发技能标签
	FGameplayTag Abilities_Fire_FireBlast; //火焰爆发技能标签


	FGameplayTag Abilities_Passive_HaloOfProtection; //被动技能-守护光环
	FGameplayTag Abilities_Passive_LifeSiphon; //被动技能-生命回复
	FGameplayTag Abilities_Passive_ManaSiphon; //被动技能-蓝量回复
	FGameplayTag Abilities_Passive_EnergySiphon;//被动技能-能量回复

	
	FGameplayTag Cooldown_Fire_FireBolt; //火球术冷却标签
	//FGameplayTag Cooldown_Lightning_Electrocute;

	
	FGameplayTag CombatSocket_Weapon; //使用武器攻击部位标签
	FGameplayTag CombatSocket_RightHand; //右手攻击部位标签
	FGameplayTag CombatSocket_LeftHand; //左手攻击部位标签
	FGameplayTag CombatSocket_Tail;//尾部攻击部位标签

	//使用攻击动作索引
	FGameplayTag Montage_Attack_1; 
	FGameplayTag Montage_Attack_2;
	FGameplayTag Montage_Attack_3;
	FGameplayTag Montage_Attack_4;

	
	TMap<FGameplayTag, FGameplayTag> DamageTypesToResistances;// 伤害类型
	//TMap<FGameplayTag, FGameplayTag> DeBuffsToResistance; //属性伤害标签对应负面标签
	TMap<FGameplayTag, FGameplayTag> DamageTypesToDebuffs;


	FGameplayTag Effects_HitReact;// 命中效果


	//阻止输入相关事件触发
	FGameplayTag Player_Block_InputPressed; //阻挡键位按下输入
	FGameplayTag Player_Block_InputHeld; //阻挡键位悬停输入
	FGameplayTag Player_Block_InputReleased; //阻挡键位抬起输入
	FGameplayTag Player_Block_CursorTrace; //阻挡鼠标拾取事件

	FGameplayTag GameplayCue_FireBlast; //火焰爆炸火球爆炸时的表现效果

	
protected:

private:
	static FAuraGameplayTags GameplayTags;
};
